// 1. 导入 axios
// utils/request.js专门用来封装axios
import axios from 'axios'
import store from '@/store/index.js'
import router from '../router/index.js'

// 2. 调用 axios.create()函数，创建axios实例对象
const instance = axios.create({
  // 配置请求的根路径
  baseURL: 'http://www.liulongbin.top:3008'
})
// 为步骤2创建出来的instance配置拦截器
// 请求拦截器 instance interceptors.request.use（fn1，fn2）
instance.interceptors.request.use(
  function (config) {
    // 为请求头挂载 Authorization 字段
    // 结论：只有在.vue组件中，才可以使用this.$store或者mapXXX函数
    // 技巧：在.js模块中，如果想访问vuex，导入store.js
    if (config.url.startsWith('/my')) {
      config.headers.Authorization = store.state.user.token
    }
    console.log(store)
    return config
  },
  function (error) {
    return Promise.reject(error)
  }
)
// 添加响应拦截器
instance.interceptors.response.use(
  function (response) {
    // 响应状态码为 2xx 时触发成功的回调，形参中的 response 是“成功的结果”
    // 对响应数据做点什么
    return response
  },
  function (error) {
    // 对响应错误做点什么
    // 响应状态码不是 2xx 时触发失败的回调，形参中的 error 是“失败的结果”
    if (error.response.status === 401) {
      store.commit('updateToken', '')
      router.push('/login')
    }
    return Promise.reject(error)
  }
)
// 3. 向外导出 axios 的实例对象，供外界使用
export default instance
